﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;

namespace WeatherBar
{
    public partial class AddUSLocation : Form
    {
        Dictionary<string, string> states = new Dictionary<string, string>();

        public AddUSLocation()
        {
            InitializeComponent();
            XmlDocument doc = new XmlDocument();
            doc.Load(System.IO.Path.GetDirectoryName(Application.ExecutablePath) + "\\states.xml");

            foreach (XmlNode node in doc.SelectSingleNode("states"))
            {
                states.Add(node.SelectSingleNode("name").InnerText, node.SelectSingleNode("ab").InnerText);
            }
        }

        private void AddUSLocation_Load(object sender, EventArgs e)
        {
            listBox2.Sorted = true;
            foreach (string value in states.Values)
            {
                listBox2.Items.Add(value); 
            }
        }

        public static void GetCitiesInState(string state, ListBox lb)
        {
            lb.Items.Clear();
            XmlDocument doc = new XmlDocument();
            try
            {

                doc.Load(string.Format("http://www.webservicex.net/uszip.asmx/GetInfoByState?USState={0}", state));
                foreach (XmlNode node in doc.SelectSingleNode("NewDataSet"))
                {
                    XmlNode childNode = node.SelectSingleNode("CITY");
                    string city = childNode.InnerText;
                    if (!lb.Items.Contains(city))
                    {
                        lb.Items.Add(city);
                    }
                }
            }
            catch
            {
                MessageBox.Show("Error fetching data from server.", "WeatherBar", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            lb.Sorted = true;

        }
        void OnMapClick(object sender)
        {
            LinkLabel label = (LinkLabel)sender;
            GetCitiesInState(states[label.Text], listBox1);
            listBox2.SelectedItem = states[label.Text];
        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel4_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel5_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel20_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel12_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel11_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel14_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel22_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel21_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel9_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel10_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel8_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel23_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel24_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel13_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel6_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel7_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel17_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel15_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel30_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel28_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel25_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel26_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel29_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel33_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel34_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel18_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel16_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel31_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel32_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel27_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel42_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel41_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel40_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel39_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel38_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel37_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel36_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel35_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel19_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel51_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel50_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel49_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel48_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel47_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel46_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel45_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel43_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void linkLabel44_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            OnMapClick(sender);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if ((listBox2.SelectedItems.Count != 0) && (listBox1.SelectedItems.Count != 0))
            {
                ((Form1)this.Owner).textBox1.Text = string.Format("{0}, {1}", listBox1.SelectedItem.ToString(), listBox2.SelectedItem.ToString());
                this.Close();
            }
            else
            {
                this.Close();
            }
        }

        private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            GetCitiesInState(listBox2.SelectedItem.ToString(), listBox1);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

    }
}
